# 定义一个Logger类
# 实例化的时候返回一个日志记录器对象

import logging
import time
import os
from lib.config import config

class Logger(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            logConfig = config['logger']
            logger = logging.getLogger(logConfig['name'])
            # 3.设置日志记录器的默认级别
            logger.setLevel(getattr(logging, logConfig['loggerlevel']))
            # 4.创建日志处理器
            # StreamHandler流处理器，默认的输出目标sys.stderr
            sh = logging.StreamHandler()
            # 5.设置日志处理器的默认级别
            sh.setLevel(getattr(logging, logConfig['shLevel']))
            # 6.创建格式器
            fm = logging.Formatter(
                fmt=logConfig['fmt'],
                datefmt=logConfig['datefmt']
            )
            # 7.设置处理器的格式器
            sh.setFormatter(fm)

            # 添加一个FileHandler文件处理器
            logPath = os.path.join(
                os.path.dirname(
                    os.path.dirname(
                        os.path.abspath(__file__)
                    )
                ), 'log', time.strftime("%Y_%m_%d.log")
            )
            fh = logging.FileHandler(
                filename=logPath,
                mode="a",
                encoding="utf8"
            )
            fh.setLevel(getattr(logging, logConfig['fhLevel']))
            fh.setFormatter(fm)
            # 8.将处理器添加到记录器的handlers中(一个日志记录器的handlers中可以包含若干个日志处理器)
            logger.addHandler(sh)
            logger.addHandler(fh)
            cls.__instance = logger
        return cls.__instance

